sach0x0000000000000000f95b1280870cd0d675c000008084300000008080b95a7960806040523480156200001157600080fd5b506200001c62000022565b62000048565b60017f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf455565b615a2180620000586000396000f3fe6080604052600436106102045760003560e01c80637efcfe8511610118578063b0705b42116100a0578063c57b22be1161006f578063c57b22be1461057b578063d514da5014610590578063e17376b5146105b0578063f2235487146105d0578063faf4d8cb146105e557610204565b8063b0705b4214610520578063b269b9ae14610461578063b4a8498c14610540578063b65975ec1461055b57610204565b80638ae20dc9116100e75780638ae20dc91461048b5780639ba0d146146104ab5780639beb4650146104cb578063a7e7aacd146104eb578063ab9b2adf1461050057610204565b80637efcfe85146104265780638398180814610441578063871b8ff1146104615780638773334c1461047657610204565b8063452692981161019b5780635aca41f61161016a5780635aca41f614610380578063647b5923146103ad57806367708dae146103cf57806368809a23146103f157806378b91e701461041157610204565b80634526929814610300578063505a757314610320578063595a5ebc1461034057806359acda851461036057610204565b80632a3174f4116101d75780632a3174f4146102965780632d2da806146102b85780633b154b73146102cb578063439fab91146102e057610204565b806313d9787b146102095780631d1796431461022b578063253946451461024b578063264c09121461026b575b600080fd5b34801561021557600080fd5b50610229610224366004614b1a565b6105fa565b005b34801561023757600080fd5b50610229610246366004614956565b610740565b34801561025757600080fd5b50610229610266366004614811565b610755565b34801561027757600080fd5b506102806107b6565b60405161028d91906150ea565b60405180910390f35b3480156102a257600080fd5b506102ab6107bf565b60405161028d91906150f5565b6102296102c6366004614525565b6107c4565b3480156102d757600080fd5b5061022961082c565b3480156102ec57600080fd5b506102296102fb366004614811565b610832565b34801561030c57600080fd5b5061022961031b366004614a56565b610962565b34801561032c57600080fd5b5061022961033b366004614ae5565b610b89565b34801561034c57600080fd5b5061022961035b366004614844565b610df6565b34801561036c57600080fd5b5061022961037b3660046147e1565b610e03565b34801561038c57600080fd5b506103a061039b3660046145db565b610e0b565b60405161028d91906157de565b3480156103b957600080fd5b506103c2610eda565b60405161028d9190615828565b3480156103db57600080fd5b506103e4610ee6565b60405161028d9190615858565b3480156103fd57600080fd5b506103a061040c366004614895565b610ef5565b34801561041d57600080fd5b506102296110db565b34801561043257600080fd5b5061022961035b366004614b4f565b34801561044d57600080fd5b5061022961045c3660046146b0565b61110b565b34801561046d57600080fd5b506102296113a4565b34801561048257600080fd5b506102806113ae565b34801561049757600080fd5b506102ab6104a6366004614613565b6113b3565b3480156104b757600080fd5b506102ab6104c6366004614ae5565b6113d0565b3480156104d757600080fd5b506102296104e636600461463e565b6113e2565b3480156104f757600080fd5b506102806113ee565b34801561050c57600080fd5b5061022961051b366004614aff565b6114e6565b34801561052c57600080fd5b5061022961053b36600461463e565b6116bb565b34801561054c57600080fd5b506102296104e636600461467d565b34801561056757600080fd5b506102ab610576366004614613565b6118ed565b34801561058757600080fd5b506103e461190a565b34801561059c57600080fd5b506102296105ab366004614591565b611920565b3480156105bc57600080fd5b506102296105cb3660046148f0565b611bf8565b3480156105dc57600080fd5b506103c2611f5e565b3480156105f157600080fd5b506103c2611f71565b6000805160206159cc833981519152546001811461061757600080fd5b60026000805160206159cc83398151915255610631611f84565b62ffffff63ffffffff841611156106635760405162461bcd60e51b815260040161065a90615587565b60405180910390fd5b63ffffffff831662ffffff141561068c5760405162461bcd60e51b815260040161065a90615551565b63ffffffff821661ffff1080156106ac5750637ffffffe63ffffffff8316105b6106c85760405162461bcd60e51b815260040161065a90615476565b604080516101008101825263ffffffff80861682523360208301528416918101919091526000606082018190526080820181905260a0820181905260c0820181905260e0820181905261071a82611fa7565b9050610727600682611fe8565b505060016000805160206159cc83398151915255505050565b610748612150565b5050505050505050505050565b6000805160206159cc833981519152546001811461077257600080fd5b5050621baf8060145550601380546001600160a01b031916732eaa1377e0fc95de998b9fa7611e9d67eba534fd17905560016000805160206159cc83398151915255565b60095460ff1681565b600090565b6001600160a01b0381811614156107ed5760405162461bcd60e51b815260040161065a906153d2565b6000341161080d5760405162461bcd60e51b815260040161065a9061543f565b610815611f84565b610829600061082334612184565b836121b1565b50565b42601555565b61083a612244565b600080808061084b85870187614541565b600280546001600160a01b038086166001600160a01b0319928316179092556003805483881690831617905560138054928516929091169190911790556040805160c0810182526000808252602082018190527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47092820192909252606081018290526080810183905260a0810191909152939750919550935091506108ef81612258565b60008052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee55621baf8060148190556040517ff2b18f8abbd8a0d0c1fb8245146eedf5304887b12f6395b548ca238e054a148391610951916150f5565b60405180910390a150505050505050565b6000805160206159cc833981519152546001811461097f57600080fd5b60026000805160206159cc83398151915255610999611f84565b600354604051634b18bd0f60e01b81526001600160a01b0390911690634b18bd0f906109c9903390600401614f4b565b60006040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b50505050610a0284612258565b600654600160601b900463ffffffff166000908152600d602052604090205414610a3e5760405162461bcd60e51b815260040161065a906156cd565b8160005b8163ffffffff16811015610b0c57610a7786868684818110610a6057fe5b9050602002810190610a7291906158f6565b612288565b6020810151600c80546001600160401b03600160801b80830482169094011690920267ffffffffffffffff60801b199092169190911790559550610aba86612258565b865163ffffffff9081166000908152600d6020526040808220939093558851925192909116917f81a92942d0f9c33b897a438384c9c3d88be397776138efa3ba1a4fc8b62684249190a2600101610a42565b506006805463ffffffff600160601b808304821685019091160263ffffffff60601b19909116179055600c546001600160401b03600160401b82048116600160801b909204161115610b705760405162461bcd60e51b815260040161065a906155bd565b5060016000805160206159cc8339815191525550505050565b6000805160206159cc8339815191525460018114610ba657600080fd5b60026000805160206159cc83398151915281905563ffffffff808416600090815260126020908152604091829020825160c081018452815480861682526001600160a01b0364010000000082048116948301859052600160c01b909104861694820194909452600182015460608201529401549182166080850152600160a01b90910490911660a0830152610c4d5760405162461bcd60e51b815260040161065a906155f3565b6003548151602083015160405163b79eb8c760e01b81526000936001600160a01b03169263b79eb8c792610c8392600401615839565b60206040518083038186803b158015610c9b57600080fd5b505afa158015610caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd3919061493a565b63ffffffff8516600090815260116020908152604080832080546001600160a01b0319166001600160a01b0386169081179091556012835281842080546001600160e01b03191681556001810194909455600290930180546001600160c01b0319169055908501516080860151865187840151606089015160a08a01519551630234ce5960e41b8152979850959663234ce59096610d75969091600401614fde565b600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b505050508160a0015163ffffffff167f0b9f3586023bf754b8d962232407f7ac4d90fd19a1c4756c6619927abf06756060405160405180910390a2505060016000805160206159cc833981519152555050565b610dfe612150565b505050565b610829612150565b6000806001600160a01b03831615610ea0576003546040516375698bb160e11b81526001600160a01b039091169063ead3176290610e4d908690600401614f4b565b60206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d9190614ac3565b90505b60046000610eae86846123cd565b6001600160501b03191681526020810191909152604001600020546001600160801b0316949350505050565b600e5463ffffffff1681565b600c546001600160401b031681565b6000333014610f165760405162461bcd60e51b815260040161065a9061562a565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190610f45903090600401614f4b565b60206040518083038186803b158015610f5d57600080fd5b505afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906147f9565b60405163a9059cbb60e01b81529091506001600160a01b0387169063a9059cbb90610fc6908890889060040161501c565b600060405180830381600087803b158015610fe057600080fd5b505af1158015610ff4573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03891691506370a0823190611027903090600401614f4b565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107791906147f9565b9050600061108583836123ea565b9050600081116110a75760405162461bcd60e51b815260040161065a906153ed565b846001600160801b03168111156110d05760405162461bcd60e51b815260040161065a9061530e565b979650505050505050565b6014546015546110ea91612417565b4210156110f657600080fd5b6000805460ff19166001908117909155429055565b6000805160206159cc833981519152546001811461112857600080fd5b60026000805160206159cc83398151915255611142611f84565b600e5463ffffffff908116600181019091166000908152600d60205260408120549091905b8061119288888681811061117757fe5b905060c0020180360381019061118d9190614a3b565b612258565b146111c1576001909201918583106111bc5760405162461bcd60e51b815260040161065a9061576f565b611167565b50845b808310156112825763ffffffff60018301166000908152600d60205260409020546111f488888681811061117757fe5b146112115760405162461bcd60e51b815260040161065a90615491565b8160010191506001600160fd1b0387878581811061122b57fe5b905060c0020160a0013560001c166001600160fd1b038660400151858151811061125157fe5b602002602001015116146112775760405162461bcd60e51b815260040161065a90615329565b8260010192506111c4565b6002548551602087015160608801516040808a015160808b0151915163054185eb60e51b81526000966001600160a01b03169563a830bd60956112cd9591949093919260040161503e565b60206040518083038186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d91906147c1565b90508061133c5760405162461bcd60e51b815260040161065a9061524f565b60065463ffffffff600160601b9091048116908416111561136f5760405162461bcd60e51b815260040161065a906152bd565b5050600e805463ffffffff191663ffffffff92909216919091179055505060016000805160206159cc83398151915255505050565b6113ac61243c565b565b600190565b600a60209081526000928352604080842090915290825290205481565b600d6020526000908152604090205481565b6113ea612150565b5050565b6000805160206159cc833981519152546000906001811461140e57600080fd5b60026000805160206159cc8339815191525560095460ff161561143457600091506114d0565b600c546001600160401b039081166000908152600f60205260408120549091600160a01b90910416431080159061148e5750600c546001600160401b039081166000908152600f6020526040902054600160a01b90041615155b905080156114cd576009805460ff191660011790556040517fc71028c67eb0ef128ea270a59a674629e767d51c1af44ed6753fd2fad2c7b67790600090a15b91505b60016000805160206159cc833981519152555090565b6000805160206159cc833981519152546001811461150357600080fd5b60026000805160206159cc8339815191525561151d611f84565b62ffffff63ffffffff841611156115465760405162461bcd60e51b815260040161065a90615587565b63ffffffff831662ffffff141561156f5760405162461bcd60e51b815260040161065a90615551565b60006001600160a01b0383166115875750600061160a565b6003546040516375698bb160e11b81526001600160a01b039091169063ead31762906115b7908690600401614f4b565b60206040518083038186803b1580156115cf57600080fd5b505afa1580156115e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116079190614ac3565b90505b604080516101008101825263ffffffff8616815233602082015261ffff8316918101919091526000606082018190526080820181905260a0820181905260c0820181905260e0820181905261165e82611fa7565b905061166b600682611fe8565b600061167733856123cd565b6001600160501b0319166000908152600460205260409020805460ff60801b191660ff60801b179055505060016000805160206159cc833981519152555050505050565b6000805160206159cc83398151915254600181146116d857600080fd5b60026000805160206159cc833981519152556116f2611f84565b600354604051634b18bd0f60e01b81526001600160a01b0390911690634b18bd0f90611722903390600401614f4b565b60006040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b50600092508491508290505b8163ffffffff168110156118285761178f86868381811061177757fe5b9050602002810190611789919061590b565b826124bf565b85858281811061179b57fe5b90506020028101906117ad919061590b565b6117be906040810190602001614b35565b830192508585828181106117ce57fe5b90506020028101906117e0919061590b565b6117ee906020810190614ae5565b63ffffffff167f0cdbd8bd7813095001c5fe7917bd69d834dc01db7c1dfcf52ca135bd2038441360405160405180910390a260010161175a565b50600c805467ffffffffffffffff60401b1967ffffffffffffffff60801b1967ffffffffffffffff1983166001600160401b039384168701841617908116600160801b918290048416879003841690910217908116600160401b918290048316869003909216810291909117909155600680546bffffffff00000000000000001981169083900463ffffffff9081168501811684029190911791829055600e548116929091041611156107275760405162461bcd60e51b815260040161065a906152f3565b601060209081526000928352604080842090915290825290205481565b600c54600160401b90046001600160401b031681565b6000805160206159cc833981519152546001811461193d57600080fd5b60026000805160206159cc8339815191525560006001600160a01b038416156119e3576003546040516375698bb160e11b81526001600160a01b039091169063ead3176290611990908790600401614f4b565b60206040518083038186803b1580156119a857600080fd5b505afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190614ac3565b90505b60006119ef86836123cd565b6001600160501b031981166000908152600460205260408120549192506001600160801b0390911690611a22828761294d565b90506000816001600160801b031611611a4d5760405162461bcd60e51b815260040161065a9061567b565b61ffff8416611ae1576000886001600160a01b0316826001600160801b0316604051611a7890614e55565b60006040518083038185875af1925050503d8060008114611ab5576040519150601f19603f3d011682016040523d82523d6000602084013e611aba565b606091505b5050905080611adb5760405162461bcd60e51b815260040161065a9061571e565b50611b5f565b6040516368809a2360e01b815230906368809a2390611b0a908a908c9086908890600401615165565b602060405180830381600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c9190614aa7565b90505b6001600160501b031983166000908152600460205260409081902080546001600160801b0319168385036001600160801b03161790555161ffff8516906001600160a01b038a16907fefef619ae4a542a2b8810b4efeccd8478bd683e985354ee31dd2d644aff6d0ca90611bd49085906157de565b60405180910390a35050505060016000805160206159cc8339815191525550505050565b6000805160206159cc8339815191525460018114611c1557600080fd5b60026000805160206159cc833981519152556001600160a01b038281161415611c505760405162461bcd60e51b815260040161065a906153d2565b611c58611f84565b6003546040516375698bb160e11b81526000916001600160a01b03169063ead3176290611c89908890600401614f4b565b60206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd99190614ac3565b60035460405163f3a65bf960e01b81529192506001600160a01b03169063f3a65bf990611d0a908490600401615819565b60206040518083038186803b158015611d2257600080fd5b505afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a91906147c1565b15611d775760405162461bcd60e51b815260040161065a906155d8565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190611da6903090600401614f4b565b60206040518083038186803b158015611dbe57600080fd5b505afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df691906147f9565b6040516323b872dd60e01b81529091506001600160a01b038716906323b872dd90611e2990339030908a90600401614f5f565b600060405180830381600087803b158015611e4357600080fd5b505af1158015611e57573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03891691506370a0823190611e8a903090600401614f4b565b60206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda91906147f9565b90506000611ef0611eeb83856123ea565b612184565b90506000816001600160801b0316118015611f1b57506001600160681b036001600160801b03821611155b611f375760405162461bcd60e51b815260040161065a906151ac565b611f428482886121b1565b5050505060016000805160206159cc8339815191525550505050565b600654600160401b900463ffffffff1681565b600654600160601b900463ffffffff1681565b60095460ff16156113ac5760405162461bcd60e51b815260040161065a906154ad565b6060600682516020808501516040808701519051611fd2959493600091829182918291829101614eb6565b6040516020818303038152906040529050919050565b600c544362013b0001906001600160401b03808216600160401b9092041601600061201284612975565b90506040518060600160405280826bffffffffffffffffffffffff19168152602001846001600160401b0316815260200186600b81111561204f57fe5b90526001600160401b038084166000908152600f60209081526040918290208451815492860151909416600160a01b0267ffffffffffffffff60a01b1960609590951c6001600160a01b03199093169290921793909316178083559083015190829060ff60e01b1916600160e01b83600b8111156120c957fe5b02179055509050507fd0943372c08b438a88d4b39d77216901079eda9ca59d45349841c099083b683033838787876001600160401b0316604051612111959493929190614f8b565b60405180910390a15050600c80546001600160401b03600160401b80830482166001019091160267ffffffffffffffff60401b19909116179055505050565b6013546040516001600160a01b039091169036600082376000803683855af43d806000843e818015612180578184f35b8184fd5b6000600160801b82106121a95760405162461bcd60e51b815260040161065a9061526a565b50805b919050565b60408051608081018252600080825261ffff861660208301526001600160801b038516928201929092526001600160a01b0383166060820152906121f482612983565b9050612201600182611fe8565b8461ffff167f8f5f51448394699ad6a3b80cdadf4ec68c5d724c8c3fea09bea55b3c2d0e2dd08560405161223591906157de565b60405180910390a25050505050565b60016000805160206159cc83398151915255565b60008160405160200161226b919061578b565b604051602081830303815290604052805190602001209050919050565b6122906141a4565b825160010163ffffffff166122ab60a0840160808501614ae5565b63ffffffff16146122ce5760405162461bcd60e51b815260040161065a90615645565b8260600151826040013510156122f65760405162461bcd60e51b815260040161065a90615219565b6000604083013561230a42620151806123ea565b11159050600061231c42610384612417565b84604001351115905081801561232f5750805b61234b5760405162461bcd60e51b815260040161065a9061556c565b5050600080600061235b856129aa565b925092509250600061236e878784612e12565b90506040518060c0016040528087608001602081019061238e9190614ae5565b63ffffffff1681526001600160401b039094166020850152604080850195909552938601356060840152943560808301525060a0019290925250919050565b60a01b61ffff60a01b166001600160a01b03919091161760501b90565b60006124108383604051806040016040528060018152602001603b60f91b815250613076565b9392505050565b6000828201838110156124105760405162461bcd60e51b815260040161065a90615344565b6000805460ff19168155600155621baf8060148190556040517ff2b18f8abbd8a0d0c1fb8245146eedf5304887b12f6395b548ca238e054a148391612480916150f5565b60405180910390a1600060158190555b600f8110156124b7576000818152601660205260409020805460ff19169055600101612490565b506000601755565b600d60006124d06020850185614ae5565b63ffffffff1681526020810191909152604001600020546124f961118d36859003850185614a3b565b146125165760405162461bcd60e51b815260040161065a90615360565b600654600160401b900463ffffffff1681016001016125386020840184614ae5565b63ffffffff161461255b5760405162461bcd60e51b815260040161065a90615739565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470600061258b60c085018561586c565b9050905060005b81811015612923573660006125aa60c088018861586c565b848181106125b457fe5b90506020028101906125c691906158b2565b915091506000828260008181106125d957fe5b919091013560f81c9050600b8111156125ee57fe5b9050600381600b8111156125fe57fe5b141561269857600061264584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130a292505050565b905061ffff63ffffffff16816000015163ffffffff1611156126795760405162461bcd60e51b815260040161065a906154c8565b61269281600001518260400151836020015160006130fd565b506128d3565b600881600b8111156126a657fe5b141561273a5760006126ed84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061316492505050565b905061ffff63ffffffff16816000015163ffffffff1611156127215760405162461bcd60e51b815260040161065a906153b5565b61269281600001518260400151836020015160016130fd565b600681600b81111561274857fe5b141561285b57600061278f84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317892505050565b905061ffff63ffffffff16816040015163ffffffff16116127c8576127c381604001518260200151836060015160026130fd565b612692565b80606001516001600160801b0316600114156126925760006040518060c00160405280836080015163ffffffff1681526020018360a001516001600160a01b031681526020018360c0015163ffffffff1681526020018360e00151815260200183602001516001600160a01b03168152602001836040015163ffffffff16815250905061285481613260565b50506128d3565b600a81600b81111561286957fe5b14156128bb5760006128b084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061334692505050565b905061269281613260565b60405162461bcd60e51b815260040161065a9061537f565b6129138684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133dd92505050565b9550505050806001019050612592565b50604084013582146129475760405162461bcd60e51b815260040161065a90615697565b50505050565b6000816001600160801b0316836001600160801b03161061296e5781612410565b5090919050565b805160209091012060601b90565b6060600160208084015160408086015160608701519151611fd29594600094939101614e58565b6000806060816129bd60208601866158b2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600c5485517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709a509198509495506001600160401b03808616600160801b909604169490940193600a93509150612a419050565b0615612a5f5760405162461bcd60e51b815260040161065a906151c7565b8151600a90046001600160401b0381118015612a7a57600080fd5b506040519080825280601f01601f191660200182016040528015612aa5576020820181803683370190505b5092506000612ab7606088018861586c565b9050905060005b81811015612e075736612ad460608a018a61586c565b83818110612ade57fe5b9050602002810190612af09190615920565b90506000612b046040830160208401614ae5565b63ffffffff16905085518110612b2c5760405162461bcd60e51b815260040161065a906152a1565b600a810615612b4d5760405162461bcd60e51b815260040161065a90615234565b6000600a82049050878181518110612b6157fe5b01602001516001600160f81b03191615612b8d5760405162461bcd60e51b815260040161065a906151ac565b600160f81b888281518110612b9e57fe5b60200101906001600160f81b031916908160001a9053506000878381518110612bc357fe5b016020015160f81c600b811115612bd657fe5b9050600181600b811115612be657fe5b1415612c22576000612bfa8985603c6133ec565b90506000612c078261348f565b9050612c15818d8b01613518565b8b6001019b505050612df8565b600781600b811115612c3057fe5b1415612d22576000612c448985603c6133ec565b90506000612c51826135a8565b9050612c5d86806158b2565b159050612c9e576000612c79612c7388806158b2565b84613618565b905080612c985760405162461bcd60e51b815260040161065a9061539a565b50612d1b565b60008160200151604051602001612cb59190614c42565b60408051601f198184030181529181528151602092830120848201516001600160a01b03166000908152600a8452828120606087015163ffffffff16825290935291205414905080612d195760405162461bcd60e51b815260040161065a906152d8565b505b5050612df8565b6060600382600b811115612d3257fe5b1415612d4b57612d448985603c6133ec565b9050612dea565b600882600b811115612d5957fe5b1415612d6b57612d448985603c6133ec565b600a82600b811115612d7957fe5b1415612d8b57612d44898560646133ec565b600682600b811115612d9957fe5b1415612dd257612dab8985606e6133ec565b90506000612db882613178565b9050612dc6818d8b016136fa565b8b6001019b5050612dea565b60405162461bcd60e51b815260040161065a906156b2565b612df48c826133dd565b9b50505b50505050806001019050612abe565b505050509193909250565b6000806002612e2760a0860160808701614ae5565b63ffffffff16612e3d60c0870160a08801614ae5565b63ffffffff16604051602001612e54929190614c6f565b60408051601f1981840301815290829052612e6e91614ca3565b602060405180830381855afa158015612e8b573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612eae91906147f9565b90506002818660800151604051602001612ec9929190614c6f565b60408051601f1981840301815290829052612ee391614ca3565b602060405180830381855afa158015612f00573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f2391906147f9565b90506002818560000135604051602001612f3e929190614c6f565b60408051601f1981840301815290829052612f5891614ca3565b602060405180830381855afa158015612f75573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f9891906147f9565b90506002818560400135604051602001612fb3929190614c6f565b60408051601f1981840301815290829052612fcd91614ca3565b602060405180830381855afa158015612fea573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061300d91906147f9565b9050600061301e60208601866158b2565b8560405160200161303193929190614c7d565b60405160208183030381529060405290506040518151838352602082602083018560025afa81845280801561306557613067565bfe5b50509051979650505050505050565b6000818484111561309a5760405162461bcd60e51b815260040161065a9190615199565b505050900390565b6130aa6141d9565b60056130b6838261378a565b63ffffffff16835290506130ca83826137a3565b6001600160801b0316602084015260020190506130e783826137b3565b6001600160a01b03166040840152509092915050565b600061310984866123cd565b905061311581846137c3565b836001600160a01b03168561ffff167f08262c50127efaa884a8609d16fe2ed98c5fd8e4f1c393f2d7d8f9f52f602ff685856040516131559291906157f2565b60405180910390a35050505050565b61316c6141d9565b60096130b6838261378a565b6131806141f9565b600161318c838261378a565b63ffffffff16835290506131a083826137b3565b6001600160a01b0316602084015290506131ba838261378a565b63ffffffff16604084015290506131d183826137a3565b6001600160801b0316606084015290506131eb838261378a565b63ffffffff166080840152905061320283826137b3565b6001600160a01b031660a0840152905061321c838261378a565b63ffffffff1660c084015290506132338382613861565b60e084015290506069811461325a5760405162461bcd60e51b815260040161065a9061560f565b50919050565b60a08101805163ffffffff908116600090815260126020908152604080832086518154938801518389015163ffffffff1990951691871691909117640100000000600160c01b0319166401000000006001600160a01b03928316021763ffffffff60c01b1916600160c01b948716949094029390931781556060870151600182015560808701516002909101805496516001600160a01b0319909716919093161763ffffffff60a01b1916600160a01b9590941694850293909317905590517f1d19de6753fc463923c3d90b6fb45aca536732ed7c5ca377d4b3f63dfbe4d8199190a250565b61334e6141a4565b600561335a838261378a565b63ffffffff168352905061336e83826137b3565b6001600160a01b031660208401529050613388838261378a565b63ffffffff166040840152905061339f8382613861565b606084015290506133b083826137b3565b6001600160a01b0316608084015290506133ca838261378a565b63ffffffff1660a0840152509092915050565b80519181526020909101902090565b6060818301845110156134115760405162461bcd60e51b815260040161065a90615424565b6000826001600160401b038111801561342957600080fd5b506040519080825280601f01601f191660200182016040528015613454576020820181803683370190505b509050821561348757602081018381016020860187015b8183101561348357805183526020928301920161346b565b5050505b949350505050565b61349761423d565b60016134a3838261378a565b63ffffffff16835290506134b7838261378a565b63ffffffff16602084015290506134ce83826137a3565b6001600160801b0316604084015290506134e883826137b3565b6001600160a01b031660608401529050602d811461325a5760405162461bcd60e51b815260040161065a90615409565b6001600160401b0381166000908152600f6020526040902054600160e01b900460ff16600181600b81111561354957fe5b146135665760405162461bcd60e51b815260040161065a90615286565b6001600160401b0382166000908152600f602052604090205460601b61358c8482613871565b6129475760405162461bcd60e51b815260040161065a906154e5565b6135b061423d565b60016135bc838261378a565b63ffffffff16835290506135d083826138a1565b6001600160601b031916602084015290506135eb83826137b3565b6001600160a01b031660408401529050613605838261378a565b63ffffffff166060840152509092915050565b6000808484600081811061362857fe5b919091013560f81c9050600481111561363d57fe5b9050600081600481111561364d57fe5b14156136665761365e8585856138b1565b915050612410565b600181600481111561367457fe5b14156136855761365e858585613967565b600281600481111561369357fe5b14156136a45761365e858585613aea565b60038160048111156136b257fe5b14156136c35761365e858585613b9a565b60048160048111156136d157fe5b14156136e25761365e858585613c98565b60405162461bcd60e51b815260040161065a906151e2565b6001600160401b0381166000908152600f6020526040902054600160e01b900460ff16600681600b81111561372b57fe5b146137485760405162461bcd60e51b815260040161065a90615500565b6001600160401b0382166000908152600f602052604090205460601b61376e8482613e3f565b6129475760405162461bcd60e51b815260040161065a9061551b565b60048101600061379a8484613e58565b90509250929050565b60108101600061379a8484613e8d565b60148101600061379a8484613eb7565b6001600160501b03198216600090815260046020526040908190205481518083019092526001600160801b031690806137fc8385613ee1565b6001600160801b03908116825260ff60209283018190526001600160501b031990961660009081526004835260409020835181549490930151909616600160801b0260ff60801b19929091166001600160801b03199093169290921716179092555050565b60208101600061379a8484613f12565b60006001600160601b0319821661388f61388a85612983565b612975565b6001600160601b031916149392505050565b60148101600061379a8484613f3c565b6000806138f985858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f6b9050565b91505060008360200151846060015185600001516000801b6040516020016139249493929190614df6565b60405160208183030381529060405280519060200120905060006139488383613f86565b60408601516001600160a01b0391821691161493505050509392505050565b6000806000806000600190506139b488888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506137b3915050565b604080516020601f8c018190048102820181019092528a81529196509192506139f9918a908a9081908401838280828437600092019190915250859250613861915050565b604080516020601f8c018190048102820181019092528a8152919550919250613a3e918a908a9081908401838280828437600092019190915250859250613861915050565b602080890151604051929550929350600092613a5c92879201614c57565b60408051601f198184030181529082905280516020918201209250600091613a94916001600160f81b03199189918691899101614c0e565b6040516020818303038152906040528051906020012060001c905087604001516001600160a01b0316816001600160a01b0316148015613adc5750606088015163ffffffff16155b9a9950505050505050505050565b600080613b3285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f6b9050565b9150506000613b638460200151604051602001613b4f9190614c42565b604051602081830303815290604052614041565b613b78613b738660600151614102565b614041565b613b88613b738760000151614102565b60405160200161392493929190614cbf565b6000806000613be486868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f6b9050565b915091506000613c2b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250613861915050565b915050600085602001518660600151876000015184604051602001613c539493929190614df6565b6040516020818303038152906040528051906020012090506000613c778483613f86565b60408801516001600160a01b03918216911614955050505050509392505050565b600080613ce085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f6b9050565b60408051808201825260068152655a6b53796e6360d01b602091820152815180830190925260038252620312e360ec1b9101529150600090507fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6e7f2e760812e6696b561a918e71ad2845639638959ed846b188488dd0d8c0b953ef7fe6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b3613d8461411b565b604051602001613d97949392919061512c565b60408051601f198184030181529082905280516020918201208682015160608801518851929550600094613dee947f8012078cc90c4c82e493f1a538159fd8621f39392101b34fba2ecd141432580b9491016150fe565b60405160208183030381529060405280519060200120905060008282604051602001613e1b929190614ddb565b6040516020818303038152906040528051906020012090506000613c778583613f86565b60006001600160601b0319821661388f61388a85611fa7565b6000808260040190508084511015613e825760405162461bcd60e51b815260040161065a90615703565b929092015192915050565b6000808260100190508084511015613e825760405162461bcd60e51b815260040161065a90615660565b6000808260140190508084511015613e825760405162461bcd60e51b815260040161065a906156e8565b60008282016001600160801b0380851690821610156124105760405162461bcd60e51b815260040161065a9061545a565b6000808260200190508084511015613e825760405162461bcd60e51b815260040161065a90615536565b60008160140183511015613f625760405162461bcd60e51b815260040161065a906155a2565b50016020015190565b60006060613f7a8585856133ec565b93909201949293505050565b60008251604114613fa95760405162461bcd60e51b815260040161065a906153d2565b60208381015160408086015160608701518251600080825295019283905292939092811a91600190613fe2908890859088908890615147565b6020604051602081039080840390855afa158015614004573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166140375760405162461bcd60e51b815260040161065a906151fd565b9695505050505050565b6060600082516002026001600160401b038111801561405f57600080fd5b506040519080825280601f01601f19166020018201604052801561408a576020820181803683370190505b5090506020830183518101602083015b818310156140f857825160f81c6f6665646362613938373635343332313060088260041c021c60f81b82526f66656463626139383736353433323130600882600f16021c60f81b60018301525060018301925060028101905061409a565b5091949350505050565b60606141158263ffffffff16600461411f565b92915050565b4690565b606060208260ff1611156141455760405162461bcd60e51b815260040161065a90615754565b8160ff166001600160401b038111801561415e57600080fd5b506040519080825280601f01601f191660200182016040528015614189576020820181803683370190505b5060ff6008602094850302169390931b918301919091525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b80356121ac816159a1565b60008083601f840112614280578182fd5b5081356001600160401b03811115614296578182fd5b60208301915083602080830285010111156142b057600080fd5b9250929050565b60008083601f8401126142c8578182fd5b5081356001600160401b038111156142de578182fd5b60208301915083602060c0830285010111156142b057600080fd5b600082601f830112614309578081fd5b6040516102008082018281106001600160401b038211171561432757fe5b604052818482810187101561433a578485fd5b8492505b601083101561435e5780358252600192909201916020918201910161433e565b509195945050505050565b600082601f830112614379578081fd5b8135602061438e61438983615958565b615935565b82815281810190858301838502870184018810156143aa578586fd5b855b858110156143c8578135845292840192908401906001016143ac565b5090979650505050505050565b600082601f8301126143e5578081fd5b813560206143f561438983615958565b8281528181019085830183850287018401881015614411578586fd5b855b858110156143c857813560ff8116811461442b578788fd5b84529284019290840190600101614413565b60008083601f84011261444e578182fd5b5081356001600160401b03811115614464578182fd5b6020830191508360208285010111156142b057600080fd5b600060c0828403121561448d578081fd5b60405160c081018181106001600160401b03821117156144a957fe5b6040529050806144b8836144fa565b81526144c66020840161450e565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b803563ffffffff811681146121ac57600080fd5b80356001600160401b03811681146121ac57600080fd5b600060208284031215614536578081fd5b8135612410816159a1565b60008060008060808587031215614556578283fd5b8435614561816159a1565b93506020850135614571816159a1565b92506040850135614581816159a1565b9396929550929360600135925050565b6000806000606084860312156145a5578081fd5b83356145b0816159a1565b925060208401356145c0816159a1565b915060408401356145d0816159b6565b809150509250925092565b600080604083850312156145ed578182fd5b82356145f8816159a1565b91506020830135614608816159a1565b809150509250929050565b60008060408385031215614625578182fd5b8235614630816159a1565b915061379a602084016144fa565b60008060208385031215614650578182fd5b82356001600160401b03811115614665578283fd5b6146718582860161426f565b90969095509350505050565b6000806020838503121561468f578182fd5b82356001600160401b038111156146a4578283fd5b614671858286016142b7565b6000806000604084860312156146c4578081fd5b83356001600160401b03808211156146da578283fd5b6146e6878388016142b7565b909550935060208601359150808211156146fe578283fd5b908501906102808288031215614712578283fd5b61471c60a0615935565b82358281111561472a578485fd5b61473689828601614369565b82525060208301358281111561474a578485fd5b61475689828601614369565b60208301525060408301358281111561476d578485fd5b61477989828601614369565b604083015250606083013582811115614790578485fd5b61479c898286016143d5565b6060830152506147af88608085016142f9565b60808201528093505050509250925092565b6000602082840312156147d2578081fd5b81518015158114612410578182fd5b6000602082840312156147f2578081fd5b5035919050565b60006020828403121561480a578081fd5b5051919050565b60008060208385031215614823578182fd5b82356001600160401b03811115614838578283fd5b6146718582860161443d565b600080600060408486031215614858578081fd5b83356001600160401b0381111561486d578182fd5b6148798682870161443d565b909450925061488c9050602085016144fa565b90509250925092565b600080600080608085870312156148aa578182fd5b84356148b5816159a1565b935060208501356148c5816159a1565b925060408501356148d5816159b6565b915060608501356148e5816159b6565b939692955090935050565b600080600060608486031215614904578081fd5b833561490f816159a1565b925060208401356001600160681b038116811461492a578182fd5b915060408401356145d0816159a1565b60006020828403121561494b578081fd5b8151612410816159a1565b60008060008060008060008060008060008b8d036101e081121561497857898afd5b60c081121561498557898afd5b508b9a5060c08c0135614997816159a1565b99506149a560e08d016144fa565b98506149b46101008d016144fa565b97506101208c01356149c5816159b6565b96506149d46101408d016144fa565b95506149e36101608d01614264565b94506149f26101808d016144fa565b93506101a08c013592506101c08c01356001600160401b03811115614a15578283fd5b614a218e828f0161426f565b915080935050809150509295989b509295989b9093969950565b600060c08284031215614a4c578081fd5b612410838361447c565b600080600060e08486031215614a6a578081fd5b614a74858561447c565b925060c08401356001600160401b03811115614a8e578182fd5b614a9a8682870161426f565b9497909650939450505050565b600060208284031215614ab8578081fd5b8151612410816159b6565b600060208284031215614ad4578081fd5b815161ffff81168114612410578182fd5b600060208284031215614af6578081fd5b612410826144fa565b60008060408385031215614b11578182fd5b6145f8836144fa565b60008060408385031215614b2c578182fd5b614630836144fa565b600060208284031215614b46578081fd5b6124108261450e565b600080600060408486031215614b63578081fd5b614b6c8461450e565b925060208401356001600160401b03811115614a8e578182fd5b60601b6001600160601b0319169052565b6000815180845260208085019450808401835b83811015614bc657815187529582019590820190600101614baa565b509495945050505050565b60008151808452614be9816020860160208601615975565b601f01601f19169290920160200192915050565b60e01b6001600160e01b0319169052565b6001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b6001600160601b031991909116815260140190565b9182526001600160601b031916602082015260340190565b918252602082015260400190565b6000838583378382018181528351614c99818360208801615975565b0195945050505050565b60008251614cb5818460208701615975565b9190910192915050565b60007f19457468657265756d205369676e6564204d6573736167653a0a31353200000082527f5265676973746572207a6b53796e63207075626b65793a0a0a00000000000000601d8301528451614d1d816036850160208901615975565b600560f91b6036918401918201819052680dcdedcc6ca744060f60bb1b60378301528551614d52816040850160208a01615975565b60409201918201526d0c2c6c6deeadce840d2c8744060f60931b60418201528351614d8481604f840160208801615975565b61050560f11b604f92909101918201527f4f6e6c79207369676e2074686973206d65737361676520666f7220612074727560518201526b7374656420636c69656e742160a01b6071820152607d0195945050505050565b61190160f01b81526002810192909252602282015260420190565b7f19457468657265756d205369676e6564204d6573736167653a0a36300000000081526001600160601b031994909416601c8501526001600160e01b031960e093841b811660308601529190921b166034830152603882015260580190565b90565b60f89590951b6001600160f81b03191685526001600160e01b0319938416600186015260e09290921b909216600584015260809190911b6001600160801b031916600983015260601b6001600160601b0319166019820152602d0190565b6001600160f81b031960f88b901b1681526001600160e01b031960e08a811b821660018401526001600160601b031960608b901b16600584015288811b821660198401526001600160801b0319608089901b16601d84015286901b16602d8201526000614f266031830186614b86565b614f336045830185614bfd565b50604981019190915260690198975050505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529190921660208201526001600160681b03909116604082015260600190565b6001600160a01b03861681526001600160401b03851660208201526000600c8510614fb257fe5b84604083015260a06060830152614fcc60a0830185614bd1565b90508260808301529695505050505050565b6001600160a01b03968716815294909516602085015263ffffffff92831660408501529082166060840152608083015290911660a082015260c00190565b6001600160a01b039290921682526001600160801b0316602082015260400190565b600061028080835261505281840189614b97565b90506020838203818501526150678289614b97565b84810360408601528751808252828901935090820190845b8181101561509e57845160ff168352938301939183019160010161507f565b505084810360608601526150b28188614b97565b9350506080840191508460005b60108110156150dc578151845292820192908201906001016150bf565b505050509695505050505050565b901515815260200190565b90815260200190565b9384526001600160601b031992909216602084015263ffffffff908116604084015216606082015260800190565b93845260208401929092526040830152606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160a01b0394851681529290931660208301526001600160801b039081166040830152909116606082015260800190565b6000602082526124106020830184614bd1565b6020808252600190820152604360f81b604082015260600190565b6020808252600190820152604160f81b604082015260600190565b6020808252600190820152604760f81b604082015260600190565b6020808252600290820152611c0d60f21b604082015260600190565b6020808252600190820152606760f81b604082015260600190565b6020808252600190820152602160f91b604082015260600190565b6020808252600190820152600760fc1b604082015260600190565b602080825260029082015261189b60f11b604082015260600190565b6020808252600190820152600960fb1b604082015260600190565b602080825260029082015261413160f01b604082015260600190565b6020808252600190820152607160f81b604082015260600190565b6020808252600190820152604560f81b604082015260600190565b6020808252600190820152603760f91b604082015260600190565b6020808252600190820152603760f81b604082015260600190565b6020808252600190820152606f60f81b604082015260600190565b6020808252600290820152610c4d60f21b604082015260600190565b602080825260059082015264065786531360dc1b604082015260600190565b6020808252600190820152601b60fa1b604082015260600190565b6020808252600190820152601160fa1b604082015260600190565b60208082526003908201526236b31960e91b604082015260600190565b6020808252600190820152600560fc1b604082015260600190565b602080825260029082015261633160f01b604082015260600190565b6020808252600190820152602760f91b604082015260600190565b6020808252600190820152602d60f91b604082015260600190565b6020808252600190820152604d60f81b604082015260600190565b602080825260029082015261189960f11b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b6020808252600290820152616f3160f01b604082015260600190565b6020808252600190820152601360fa1b604082015260600190565b6020808252600390820152626d663160e81b604082015260600190565b6020808252600190820152604960f81b604082015260600190565b6020808252600190820152602560f91b604082015260600190565b6020808252600190820152604b60f81b604082015260600190565b6020808252600190820152605960f81b604082015260600190565b6020808252600190820152603b60f91b604082015260600190565b6020808252600190820152600d60fb1b604082015260600190565b6020808252600190820152606560f81b604082015260600190565b6020808252600190820152605360f81b604082015260600190565b6020808252600190820152603560f91b604082015260600190565b6020808252600190820152603160f91b604082015260600190565b60208082526002908201526106f760f41b604082015260600190565b6020808252600190820152604f60f81b604082015260600190565b6020808252600190820152603560f81b604082015260600190565b6020808252600190820152603360f91b604082015260600190565b6020808252600190820152605760f81b604082015260600190565b602080825260029082015261663160f01b604082015260600190565b6020808252600190820152606d60f81b604082015260600190565b6020808252600190820152602360f91b604082015260600190565b6020808252600190820152606960f81b604082015260600190565b6020808252600190820152602960f91b604082015260600190565b6020808252600190820152602b60f91b604082015260600190565b6020808252600190820152601960fa1b604082015260600190565b6020808252600190820152606b60f81b604082015260600190565b6020808252600190820152605160f81b604082015260600190565b602080825260029082015261379960f11b604082015260600190565b600060c08201905063ffffffff83511682526001600160401b03602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6001600160801b0391909116815260200190565b6001600160801b0383168152604081016003831061580c57fe5b8260208301529392505050565b61ffff91909116815260200190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160a01b0316602082015260400190565b6001600160401b0391909116815260200190565b6000808335601e19843603018112615882578283fd5b8301803591506001600160401b0382111561589b578283fd5b60209081019250810236038213156142b057600080fd5b6000808335601e198436030181126158c8578182fd5b8301803591506001600160401b038211156158e1578283fd5b6020019150368190038213156142b057600080fd5b6000823560be19833603018112614cb5578182fd5b6000823560de19833603018112614cb5578182fd5b60008235603e19833603018112614cb5578182fd5b6040518181016001600160401b038111828210171561595057fe5b604052919050565b60006001600160401b0382111561596b57fe5b5060209081020190565b60005b83811015615990578181015183820152602001615978565b838111156129475750506000910152565b6001600160a01b038116811461082957600080fd5b6001600160801b038116811461082957600080fdfe8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4a2646970667358221220c7833ee74cd22c8f52a565a5127988523ca7034991590c7cb6f63aabbe21798564736f6c63430007060033aa7462317137777674356c6a6665616e6c653677666c6e37346a6c76787776786d347474616e3577616577b85849497756634d797054525a6a34526444514c34576a5770456e705a6d6f4e674657726e4f394252452f63506e4a4b5330585266776b715757376547557559686a6e6769567a7534757250446934594f4e374447517330343d