0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61504c80620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80636aacaad81161010f578063a591f97f116100a2578063d3feb60211610071578063d3feb602146105d9578063d45a76cf146105ec578063e6b5be98146105ff578063f9eaee0d1461061257600080fd5b8063a591f97f1461057f578063b187bd2614610592578063c267621e146105af578063d09edf31146105c057600080fd5b806390333ba8116100de57806390333ba8146104cc578063a0c3774f146104df578063a3374177146104f2578063a5900c4d1461052557600080fd5b80636aacaad8146104525780636f63b75a1461049e5780637125590a146104b15780638456cb59146104c457600080fd5b8063423a4b40116101875780634fd49efd116101565780634fd49efd146103c057806351a424b1146103d35780635670e2ce1461040b5780635ea54eee1461042657600080fd5b8063423a4b401461033357806342d4693e14610346578063478222c2146103605780634a45a3a81461038b57600080fd5b80632384c32d116101c35780632384c32d146102f257806330eae572146103055780633bd9ef28146103185780633f4ba83a1461032b57600080fd5b80630fe105e8146101f5578063119a5e961461020a578063219723841461023b578063221a8c681461024e575b600080fd5b6102086102033660046142b9565b610625565b005b610212610676565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102086102493660046144a5565b6106ad565b6102c061025c366004614569565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610232565b610208610300366004614586565b610775565b6102086103133660046145db565b6107bc565b6102086103263660046145f6565b610815565b6102086109fa565b610208610341366004614586565b610ab7565b600f546103539060ff1681565b6040516102329190614651565b601c54610373906001600160a01b031681565b6040516001600160a01b039091168152602001610232565b6103b27f998a88aec5c99c4fc1c2cb955cad1d924b960cf1242c60cc9f26a512ad1474e681565b604051908152602001610232565b600154610373906001600160a01b031681565b6103e66103e1366004614569565b610afe565b604080516001600160a01b039094168452602084019290925290820152606001610232565b60025460035460408051928352602083019190915201610232565b600654600754600854600954604080519485526020850193909352918301526060820152608001610232565b6102c06040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102086104ac366004614983565b610b27565b6102086104bf366004614a84565b610ca8565b610208610ceb565b6102086104da366004614aa6565b610dac565b6103b26104ed366004614569565b610df1565b6103e6604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6103e6610533366004614569565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b61020861058d366004614569565b610e8d565b60045461059f9060ff1681565b6040519015158152602001610232565b601c546001600160a01b0316610373565b600054610373906201000090046001600160a01b031681565b6102086105e7366004614aa6565b610ece565b6102c06105fa366004614569565b610f13565b61020861060d366004614adb565b610f82565b61059f610620366004614569565b610fc9565b6106348460ff16848484611014565b610663336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b61066f85858585611106565b5050505050565b600a5460009081908190819060ff16600281111561069657610696614622565b600b54600c54600e54935093509350935090919293565b6106db336000357fffffffff00000000000000000000000000000000000000000000000000000000166114cd565b8051825114610716576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107705761075e83828151811061073757610737614b0d565b602002602001015183838151811061075157610751614b0d565b60200260200101516114e9565b8061076881614b6b565b915050610719565b505050565b61078184848484611593565b6107b0336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b61066f858585856115fc565b6107d98160018111156107d1576107d1614622565b60ff166116b5565b610808336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b610811826116fc565b5050565b61081f8282611777565b61084e336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b816000036108625761085f83610df1565b91505b61086c83836117e6565b600154601c54604080516001600160a01b038781166024830152604482018790529384166064820181905260848083018290528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f970387860000000000000000000000000000000000000000000000000000000017905291517f4ae000410000000000000000000000000000000000000000000000000000000081526000949293634ae0004193610939939116918690600401614c11565b6000604051808303816000875af1158015610958573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261099e9190810190614c43565b9050808060200190518101906109b49190614cf5565b6109ea576040517fc3fa62b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f4848461186a565b50505050565b610a28336000357fffffffff00000000000000000000000000000000000000000000000000000000166114cd565b60045460ff16610a64576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610ac384848484611593565b610af2336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b61066f8585858561187e565b600080600080610b0d8561193e565b805160208201516040909201519097919650945092505050565b600054610100900460ff1615808015610b475750600054600160ff909116105b80610b615750303b158015610b61575060005460ff166001145b610bd85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610c3657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610c4083836119c9565b801561077057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b610cb28282611a47565b610ce1336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b6107708383611aa1565b610d19336000357fffffffff00000000000000000000000000000000000000000000000000000000166114cd565b60045460ff1615610d56576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610db7838383611ae6565b610de6336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b6109f4848484611b78565b601c546001546040517fd4fac45d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529182166024820152600092919091169063d4fac45d90604401602060405180830381865afa158015610e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e879190614d12565b92915050565b610e9681611bce565b610ec5336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b61081182611be2565b610ed9838383611ae6565b610f08336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b6109f4848484611c84565b600080600080600080610f2587611cd8565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610f8e84848484611014565b610fbd336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bf565b61066f85858585611d0c565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610fff57610fff614622565b1461100b57801561100d565b805b9392505050565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061104b5761104b614b0d565b602002602001018181525050838160018151811061106b5761106b614b0d565b602002602001018181525050828160028151811061108b5761108b614b0d565b60200260200101818152505081816003815181106110ab576110ab614b0d565b602002602001018181525050949350505050565b6110ca838383611da7565b610770578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610bcf93929190614d66565b60ff841661120257600081118061111d5750600082115b156111fd5782600003611168576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610bcf565b80158061117457508281115b156111b7576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610bcf565b816000036111fd576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bcf565b611418565b82600003611248576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610bcf565b801580611260575061125d6224ea0084614db0565b81115b156112a3576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610bcf565b816000036112e9576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bcf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff85160161136257601c61131e83611e45565b11156111fd576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bcf565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8516016113e15761139582611e5c565b61139e83611e45565b146111fd576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610bcf565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610bcf565b8360ff16600281111561142d5761142d614622565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600281111561146757611467614622565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b60408051600081526020810190915261081190839083906110bf565b6001600160a01b038216611529576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061153e57611539601083611e7f565b611549565b611549601083611e94565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611587911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106115d3576115d3614b0d565b602002602001018181525050836001600160a01b03168160018151811061106b5761106b614b0d565b6001600160a01b03841661163c576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061166090848484611ea9565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106116eb576116eb614b0d565b602002602001018181525050919050565b600f80548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001838181111561173857611738614622565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161176c9190614651565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106117b4576117b4614b0d565b60200260200101818152505081816001815181106117d4576117d4614b0d565b60200260200101818152505092915050565b6117f08282611f91565b6001600160a01b038216611830576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610811576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118748282611fd7565b6108118282612076565b6001600160a01b0384166118be576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206118e29084848461209e565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611930929190918252602082015260400190565b60405180910390a350505050565b61196b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0380831660009081526015602052604090208054909116156119945780611997565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b600054610100900460ff16611a345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b611a3d82612215565b61081182826122e0565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611a7e57611a7e614b0d565b6020026020010181815250508160001c816001815181106117d4576117d4614b0d565b8115611adc576040517fade7e16800000000000000000000000000000000000000000000000000000000815260048101839052602401610bcf565b6108118282612354565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611b2557611b25614b0d565b6020026020010181815250508281600181518110611b4557611b45614b0d565b6020026020010181815250508181600281518110611b6557611b65614b0d565b6020026020010181815250509392505050565b611b85601684848461209e565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6060610e87826001600160a01b03166116b5565b6001600160a01b038116611c22576040517fcb2c89dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f6e5cd85c798e1d300d3f0caf1f7d1f862360d2edbb2bc2034caa0196c1220afe90600090a250565b611c916012848484611ea9565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d34590606001610c9b565b6001600160a01b038082166000908152601b602052604081208054919290911615611d03578061100d565b60169392505050565b670de0b6b3a7640000811115611d4e576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016114bf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611dfc908790309088908890600401614dc7565b602060405180830381865afa158015611e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3d9190614cf5565b949350505050565b6000611e3d611e576201518084614e54565b6123d7565b60008080611e70611e576201518086614e54565b5091509150611e3d8282612491565b600061100d836001600160a01b038416612517565b600061100d836001600160a01b038416612611565b60006001600160a01b038416158015611ec0575082155b8015611eca575081155b905060006001600160a01b03851615801590611eee5750821580611eee5750838310155b905081158015611efc575080155b15611f4c576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610bcf565b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03939093169290921783556001830155600290910155565b611f9b8282612660565b611fa5828261266a565b611faf82826126a7565b611fb98282612793565b611fc382826129e6565b611fcd8282612a30565b6108118282612b1d565b6003541561081157600180546003546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b15801561205a57600080fd5b505af115801561206e573d6000803e3d6000fd5b505050505050565b6120808282612c33565b61208a8282612cd5565b6120948282612cf7565b6108118282612f41565b60006001600160a01b0384161580156120b5575082155b80156120bf575081155b905060006001600160a01b038516158015906120db5750600084115b80156120e75750600083115b9050811580156120f5575080155b15612145576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610bcf565b6003860183905560018601849055811561216c5760006002870181905560048701556121d8565b856004015460000361219357600060028701556121898342614e68565b60048701556121d8565b85546001600160a01b038681169116146121d85785546000906121bf906001600160a01b031687612f6e565b60028801549091506121d19082612f7a565b6002880155505b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179092555050565b600054610100900460ff166122805760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b805161228b90612ff0565b6122936130d2565b6122a08160200151613147565b6122ad81604001516131bb565b6122ba816060015161322f565b6122c781608001516132a3565b6122d48160a00151613317565b6122dd8161338b565b50565b600054610100900460ff1661234b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b61081181611be2565b808214801561236257508115155b1561239c576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610bcf565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161243457612434614e25565b0590506000605061098f83020585039050600b82057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf94909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806124a25750816003145b806124ad5750816005145b806124b85750816007145b806124c35750816008145b806124ce575081600a145b806124d9575081600c145b156124e65750601f610e87565b816002146124f65750601e610e87565b6124ff836133f6565b61250a57601c61250d565b601d5b60ff169392505050565b6000818152600183016020526040812054801561260057600061253b600183614e7b565b855490915060009061254f90600190614e7b565b90508181146125b457600086600001828154811061256f5761256f614b0d565b906000526020600020015490508087600001848154811061259257612592614b0d565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806125c5576125c5614e8e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e87565b6000915050610e87565b5092915050565b600081815260018301602052604081205461265857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e87565b506000610e87565b6108118282613432565b60045460ff1615610811576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806126e6575081513a11155b90508061272b5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610bcf565b6020820151156109f4576000612741483a614e7b565b60208401519091508111158061206e5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610bcf918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156127e8576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610bcf565b60008460028111156127fc576127fc614622565b036128ce578260000361281157505050505050565b8060000361282b576128238342614e68565b600d5561206e565b60006128378342614e7b565b905060006128458583614e54565b905060006128538683614db0565b61285d9084614e7b565b9050838111156128a2576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101869052604401610bcf565b856128ae836001614e68565b6128b89190614db0565b6128c29086614e68565b600d555061206e915050565b8142101580156128e757506128e38183614e68565b4211155b156128f657612823828461349e565b6000600185600281111561290c5761290c614622565b1461291f5761291a42611e5c565b612928565b61292883611e45565b905060006129368483613536565b90508042101561297b576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101829052604401610bcf565b60006129878483614e68565b905042811080156129cd576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610bcf565b6129d7838861349e565b600d5550505050505050505050565b6129ef82610fc9565b610811576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bcf565b6000612a3b8361193e565b80519091506001600160a01b0316612a5257505050565b6000836001600160a01b031682600001516001600160a01b031614612a8e57612a89612a82858460000151612f6e565b8490612f7a565b612a90565b825b9050600082602001518210158015612ab8575060408301511580612ab8575082604001518211155b90508061066f578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610bcf565b6000612b2883611cd8565b6040805160a08101825282546001600160a01b031680825260018401546020830152600284015492820192909252600383015460608201526004909201546080830152909150612b7757505050565b6000836001600160a01b031682600001516001600160a01b031614612bac57612ba7612a82858460000151612f6e565b612bae565b825b9050600082608001514210612bc4576000612bca565b82604001515b612bd49083614e68565b9050826020015181111561066f57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610bcf565b6000612c3e83611cd8565b80549091506001600160a01b0316612c5557505050565b80546000906001600160a01b03858116911614612c8b578154612c8690612a829086906001600160a01b0316612f6e565b612c8d565b825b905081600401544210612cb657600060028301556003820154612cb09042614e68565b60048301555b80826002016000828254612cca9190614e68565b909155505050505050565b600d54600003612ce3575050565b612cee600d5461355e565b50506000600d55565b600554600003612d33576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612d6c9190614e7b565b90506000612d7a3a83614db0565b90506000836040015160001480612d95575083604001518211155b905080612ddf578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610bcf929190918252602082015260400190565b6000600555606084015115801590612df75750600085115b1561206e576000612eca306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e639190614ebd565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190614ebd565b88612f6e565b90506000612ed88483613593565b90506000612ee6828961363c565b90508660600151811115612f365760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610bcf918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600061100d8383613705565b60008282028315801590612f9d575082848281612f9957612f99614e25565b0414155b15612fde576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610bcf565b670de0b6b3a764000090049392505050565b600054610100900460ff1661305b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6130c981600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c49190614ebd565b613913565b6122dd81613987565b600054610100900460ff1661313d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b613145613a3f565b565b600054610100900460ff166131b25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd81613aaa565b600054610100900460ff166132265760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd81613b31565b600054610100900460ff1661329a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd81613bb8565b600054610100900460ff1661330e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd81613c78565b600054610100900460ff166133825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd81613d68565b600054610100900460ff166122dd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6000613403600483614eda565b1580156134195750613416606483614eda565b15155b80610e87575061342b61019083614eda565b1592915050565b60025415610811576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612040565b6000806000806134ad86613e58565b9194509250905060006134c08684614e68565b905060006134cf600c83614eda565b905060006134de600c84614e54565b6134e89087614e68565b905060006002600a5460ff16600281111561350557613505614622565b14613510578461351a565b61351a8284612491565b90506135288a838584613e77565b9a9950505050505050505050565b600080600061354442613e58565b509150915061355585838387613e77565b95945050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161176c565b600082820283158015906135b65750828482816135b2576135b2614e25565b0414155b156135f7576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610bcf565b801561363257670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820104600101611e3d565b6000949350505050565b600081600003613678576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361368857506000610e87565b670de0b6b3a7640000838102908482816136a4576136a4614e25565b04146136e6576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610bcf565b8260018203816136f8576136f8614e25565b0460010191505092915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561375b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377f9190614ebd565b90506001600160a01b0381166137d0576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610bcf565b60006137da613e9f565b9050805160001461386b57816001600160a01b031663355efdd96137fd87613f1f565b61380687613f1f565b846040518463ffffffff1660e01b815260040161382593929190614eee565b602060405180830381865afa158015613842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138669190614d12565b613555565b816001600160a01b031663ac41865a61388387613f1f565b61388c87613f1f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156138ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135559190614d12565b600054610100900460ff1661397e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd81613f53565b600054610100900460ff166139f25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b8051600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055602081015160408201516122dd9190611aa1565b600054610100900460ff166131455760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b600054610100900460ff16613b155760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd8160000151826020015183604001518460600151611d0c565b600054610100900460ff16613b9c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b6122dd8160000151826020015183604001518460600151611106565b600054610100900460ff16613c235760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b8051613c2e906116fc565b60005b81602001515181101561081157613c6682602001518281518110613c5757613c57614b0d565b602002602001015160016114e9565b80613c7081614b6b565b915050613c31565b600054610100900460ff16613ce35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b8051805160208201516040830151613cfc929190611c84565b60005b82602001515181101561077057600083602001518281518110613d2457613d24614b0d565b60200260200101519050600081602001519050613d5382600001518260000151836020015184604001516115fc565b50508080613d6090614b6b565b915050613cff565b600054610100900460ff16613dd35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b8051805160208201516040830151613dec929190611b78565b60005b82602001515181101561077057600083602001518281518110613e1457613e14614b0d565b60200260200101519050600081602001519050613e43826000015182600001518360200151846040015161187e565b50508080613e5090614b6b565b915050613def565b60008080613e6a6201518085046123d7565b9196909550909350915050565b6000613555848484613e8889613ffe565b613e918a61401c565b613e9a8b614038565b614045565b60606000613eab6140a1565b905036811115613ec957505060408051600081526020810190915290565b8067ffffffffffffffff811115613ee257613ee26142f2565b6040519080825280601f01601f191660200182016040528015613f0c576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614613f4b5781610e87565b610e876140da565b600054610100900460ff16613fbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bcf565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008061400e6201518084614eda565b905061100d610e1082614e54565b60008061402b610e1084614eda565b905061100d603c82614e54565b6000610e87603c83614eda565b600081614053603c85614db0565b61405f610e1087614db0565b6201518061406e8b8b8b614166565b6140789190614db0565b6140829190614e68565b61408c9190614e68565b6140969190614e68565b979650505050505050565b600060243610156140b25750600090565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe036013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa15801561413d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141619190614ebd565b905090565b60006107b284101561417757600080fd5b838383600062253d8c60046064600c614191600e88614f1a565b61419b9190614f3a565b6141a788611324614fa2565b6141b19190614fa2565b6141bb9190614f3a565b6141c6906003614fca565b6141d09190614f3a565b600c806141de600e88614f1a565b6141e89190614f3a565b6141f390600c614fca565b6141fe600288614f1a565b6142089190614f1a565b6142149061016f614fca565b61421e9190614f3a565b6004600c61422d600e89614f1a565b6142379190614f3a565b614243896112c0614fa2565b61424d9190614fa2565b614259906105b5614fca565b6142639190614f3a565b61426f617d4b87614f1a565b6142799190614fa2565b6142839190614fa2565b61428d9190614f1a565b6142979190614f1a565b98975050505050505050565b803560ff811681146142b457600080fd5b919050565b600080600080608085870312156142cf57600080fd5b6142d8856142a3565b966020860135965060408601359560600135945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715614344576143446142f2565b60405290565b6040805190810167ffffffffffffffff81118282101715614344576143446142f2565b60405160c0810167ffffffffffffffff81118282101715614344576143446142f2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143d7576143d76142f2565b604052919050565b600067ffffffffffffffff8211156143f9576143f96142f2565b5060051b60200190565b6001600160a01b03811681146122dd57600080fd5b80356142b481614403565b600082601f83011261443457600080fd5b81356020614449614444836143df565b614390565b82815260059290921b8401810191818101908684111561446857600080fd5b8286015b8481101561448c57803561447f81614403565b835291830191830161446c565b509695505050505050565b80151581146122dd57600080fd5b600080604083850312156144b857600080fd5b823567ffffffffffffffff808211156144d057600080fd5b6144dc86838701614423565b93506020915081850135818111156144f357600080fd5b85019050601f8101861361450657600080fd5b8035614514614444826143df565b81815260059190911b8201830190838101908883111561453357600080fd5b928401925b8284101561455a57833561454b81614497565b82529284019290840190614538565b80955050505050509250929050565b60006020828403121561457b57600080fd5b813561100d81614403565b6000806000806080858703121561459c57600080fd5b84356145a781614403565b935060208501356145b781614403565b93969395505050506040820135916060013590565b8035600281106142b457600080fd5b6000602082840312156145ed57600080fd5b61100d826145cc565b6000806040838503121561460957600080fd5b823561461481614403565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016002831061468c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000606082840312156146a457600080fd5b6040516060810181811067ffffffffffffffff821117156146c7576146c76142f2565b60405290508082356146d881614403565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561470957600080fd5b614711614321565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006080828403121561474d57600080fd5b614755614321565b9050614760826142a3565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561479857600080fd5b6147a061434a565b90506147ab826145cc565b8152602082013567ffffffffffffffff8111156147c757600080fd5b6147d384828501614423565b60208301525092915050565b6000608082840312156147f157600080fd5b6147f961434a565b9050813561480681614403565b81526148158360208401614692565b602082015292915050565b6000608080838503121561483357600080fd5b61483b61434a565b91506148478484614692565b8252606083013567ffffffffffffffff81111561486357600080fd5b8301601f8101851361487457600080fd5b80356020614884614444836143df565b82815260079290921b830181019181810190888411156148a357600080fd5b938201935b838510156148c9576148ba89866147df565b825293850193908201906148a8565b808388015250505050505092915050565b600060808083850312156148ed57600080fd5b6148f561434a565b91506149018484614692565b8252606083013567ffffffffffffffff81111561491d57600080fd5b8301601f8101851361492e57600080fd5b8035602061493e614444836143df565b82815260079290921b8301810191818101908884111561495d57600080fd5b938201935b838510156148c95761497489866147df565b82529385019390820190614962565b6000806040838503121561499657600080fd5b823567ffffffffffffffff808211156149ae57600080fd5b908401906101c082870312156149c357600080fd5b6149cb61436d565b6149d58784614692565b81526149e487606085016146f7565b60208201526149f68760e0850161473b565b604082015261016083013582811115614a0e57600080fd5b614a1a88828601614786565b60608301525061018083013582811115614a3357600080fd5b614a3f88828601614820565b6080830152506101a083013582811115614a5857600080fd5b614a64888286016148da565b60a0830152509350614a7b91505060208401614418565b90509250929050565b60008060408385031215614a9757600080fd5b50508035926020909101359150565b600080600060608486031215614abb57600080fd5b8335614ac681614403565b95602085013595506040909401359392505050565b60008060008060808587031215614af157600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b9c57614b9c614b3c565b5060010190565b60005b83811015614bbe578181015183820152602001614ba6565b50506000910152565b60008151808452614bdf816020860160208601614ba3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6001600160a01b0384168152606060208201526000614c336060830185614bc7565b9050826040830152949350505050565b600060208284031215614c5557600080fd5b815167ffffffffffffffff80821115614c6d57600080fd5b818401915084601f830112614c8157600080fd5b815181811115614c9357614c936142f2565b614cc460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614390565b9150808252856020828501011115614cdb57600080fd5b614cec816020840160208601614ba3565b50949350505050565b600060208284031215614d0757600080fd5b815161100d81614497565b600060208284031215614d2457600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614d5b57815187529582019590820190600101614d3f565b509495945050505050565b6001600160a01b03841681527fffffffff00000000000000000000000000000000000000000000000000000000831660208201526060604082015260006135556060830184614d2b565b8082028115828204841417610e8757610e87614b3c565b60006001600160a01b0380871683528086166020840152507fffffffff000000000000000000000000000000000000000000000000000000008416604083015260806060830152614e1b6080830184614d2b565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e6357614e63614e25565b500490565b80820180821115610e8757610e87614b3c565b81810381811115610e8757610e87614b3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215614ecf57600080fd5b815161100d81614403565b600082614ee957614ee9614e25565b500690565b60006001600160a01b038086168352808516602084015250606060408301526135556060830184614bc7565b818103600083128015838313168383128216171561260a5761260a614b3c565b600082614f4957614f49614e25565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614f9d57614f9d614b3c565b500590565b8082018281126000831280158216821582161715614fc257614fc2614b3c565b505092915050565b808202600082127f80000000000000000000000000000000000000000000000000000000000000008414161561500257615002614b3c565b8181058314821517610e8757610e87614b3c56fea2646970667358221220dfa346cb97a60342666eaf725d8b6e8e0b21012b71101e24673f4b81cbb299a764736f6c63430008110033